#ifndef SESSIONFRIENDITEM_H
#define SESSIONFRIENDITEM_H

#include <QWidget>
#include <QGridLayout>
#include <QLabel>
#include <QPushButton>
#include <QStyleOption>
#include <QPainter>
#include <QObjectList>
#include "debug.h"


//////////////////////////////////////////////////////////////
/// 该类用于显示窗口中间的列表区域的内部元素
//////////////////////////////////////////////////////////////
class SessionFriendItem : public QWidget
{
    Q_OBJECT
public:
    SessionFriendItem(QWidget* owner, const QIcon& avatar, const QString& name, const QString &lastMessage);

    virtual void active() = 0;
    void select();

    enum ItemType
    {
        SessionItemType = 1,
        FriendItemType,
        ApplyItemType
    };

    //重写鼠标点击事件, 实现样式改变与业务逻辑
    void mousePressEvent(QMouseEvent *event) override;

    //重写鼠标移入/移出控件事件, 实现样式改变
    void enterEvent(QEnterEvent *event) override;
    void leaveEvent(QEvent *event) override;

    //重写绘图事件
    void paintEvent(QPaintEvent *event) override;

protected:
    QWidget* owner;         //指向SessionFriendArea 的回指指针
    QGridLayout* layout;    //自身的布局管理器
    QLabel* messageLabel;    //最后一条消息的控件
    bool selected;  //自身是否处于选中状态

signals:
};

class SessionItem : public SessionFriendItem
{
public:
    SessionItem(QWidget* owner, const QString& chatSessionId, const QIcon& avatar, const QString &name, const QString &lastMessage);
    void active() override;
    void updateLastMessage(const QString& chatSessionId);
private:
    QString chatSessionId;
    QString text; //最后一条消息的文本

};

class FriendItem : public SessionFriendItem
{
public:
    FriendItem(QWidget* owner, const QString& userId, const QIcon& avatar, const QString &name, const QString &description);
    void active() override;
private:
    QString userId;
};


class ApplyItem : public SessionFriendItem
{
public:
    ApplyItem(QWidget* owner, const QString& userId, const QIcon& avatar, const QString& name);
    void active() override;

    ////////////////////////////////////////////////
    /// 同意好友逻辑
    //////////////////////////////////////////////
    void acceptFriendApply(); //网络通信
    void acceptFriendDone(const QString& userId); //网络通信完毕后的界面处理

    ////////////////////////////////////////////////
    /// 拒绝好友逻辑
    //////////////////////////////////////////////
    void rejectFriendApply(); //网络通信
    void rejectFriendDone(const QString& userId); //网络通信完毕后的界面处理


private:
    QString userId;
};

#endif // SESSIONFRIENDITEM_H





























